package co.edu.javeriana.monopoly.server.eventos;

import co.edu.javeriana.monopoly.server.modelo.Evento;
import co.edu.javeriana.monopoly.server.modelo.Jugada;
import co.edu.javeriana.monopoly.server.modelo.Jugador;
import co.edu.javeriana.monopoly.server.modelo.Monopoly;
import co.edu.javeriana.monopoly.server.modelo.MonopolyException;
import co.edu.javeriana.monopoly.server.modelo.Propiedad;

import java.rmi.RemoteException;

public class DesHipotecar extends Evento {
    public DesHipotecar(Object[] objects) {
        super(objects);
    }

    public void ejecutar() throws MonopolyException {
        Monopoly m;
        try {
            m = Monopoly.getMonopoly();
        } catch (RemoteException e) {
            throw new MonopolyException("Error al trae el juego",e);
        }
        Jugador jugador = (Jugador) m.getTablero().getJugadores().get(getJugada().getJugador().getId());
        
        Propiedad propiedadahipotecar = (Propiedad)getObjects()[0];
        propiedadahipotecar = (Propiedad)m.getTablero().getCasillas().get(new Integer(propiedadahipotecar.getPosicion()));
        
        if ( !propiedadahipotecar.isEstaHipotecada()){
            throw new MonopolyException("La propiedad no se encuentra hipotecada");
        }
        if (jugador.getSaldo() < propiedadahipotecar.getValorHipoteca()){
            throw new MonopolyException("El jugador no posee el saldo necesario para deshipotecar");
        }
        propiedadahipotecar.setEstaHipotecada(false);
        jugador.setSaldo(jugador.getSaldo()-propiedadahipotecar.getValorHipoteca());
         
        Evento e = new Continuar(null);
        Jugada nextjugada = new Jugada();
        nextjugada.setJugador(jugador);
        nextjugada.setMonopoly(m);
        nextjugada.setRegla(e);
        
        try {
            m.enviarNotificacion(nextjugada);
        } catch (RemoteException f) {
             throw new MonopolyException("Error al notificar el proximo evento",f);
        }

    }
}
